package 左哥算法.ch16小结构;

import java.util.Stack;

public class 栈实现队列 {
    public static void main(String[] args) {
        Queue queue=new Queue();
        queue.add(1).add(2).add(3).add(4);
        System.out.println(queue.pop());
        System.out.println(queue.pop());
        queue.add(5).add(6).add(7);
        while (queue.isNotEmpty()){
            System.out.println(queue.pop());
        }
    }

    /**
     * 思路，用两个栈相互倒实现先进先出。
     *  每次拿数据时，先看pop栈中有无数据。
     *  无数据将push栈中所有元素倒入pop栈。（必须是无数据才能倒，否则会破坏顺序）
     */
    static class Queue{
        Stack<Integer> push=new Stack<>();
        Stack<Integer> pop=new Stack<>();
        public Queue add(Integer node){
            push.push(node);
            return this;
        }
        public Integer pop(){
            if (dao()){
                return pop.pop();
            }
            return null;
        }
        public boolean isNotEmpty(){
            return dao();
        }

        /**
         * 返回false表示两个都空了
         */
        public boolean dao(){
            if (!pop.isEmpty()){
                return true;
            }
            if (push.isEmpty()){
                return false;
            }
            while (!push.isEmpty()){
                pop.push(push.pop());
            }
            return true;
        }
    }
}
